home *** CD-ROM | disk | FTP | other *** search
- Name translat
- Title
- page ,132
- comment /
-
- This program is a filter that reads a file and changes each
- sentence into the individual words, one word per line.
- Only alphabetic characters are retained - no case changes are
- performed.
-
- /
- ;===================================================================
- code segment public
- ;===================================================================
- ;
- ; command line is at 80h of psp - first byte is length
- ;
- org 80h
- parmsize db ?
- parm db 7fh dup (?)
- ;
- ; .com starts at 100h - but must jump around any data area
- ;
- org 100h ; com file starts here
- assume cs:code,ds:code,es:code
- translat proc far
- jmp clear
- ;===================================================================
- ;
- ; data area for .com programs
- ;
- bufsiz equ 80 ; hadn't better be words this long!
- inchar db ?
- buffer db bufsiz dup (?)
- count dw 0
- crlf db 13,10 ; end of line string
- ;
- ;===================================================================
- clear:
- ;
- ; start of actual code is here (clear)
- ;
- ;
- ; Read a character. If it is a-z or A-Z copy it to the output buffer
- ; and increment count. If not, send the output buffer and enter
- ; bypass loop until alpha character is read again.
- ;
- ;
- lea di,buffer ; set up output pointer
- again:
- ;
- ; read a character
- ;
- xor bx,bx ; zero is handle of standard input
- mov cx,1h ; get 1 character
- lea dx,inchar ; offset of inchar
- mov ah,3fh ; read a file/device function
- int 21h ; invoke the function
- ;
- ; if carry set of ax=0 exit
- ;
- jc oops ; i/o error
- and ax,ax ; set flags
- jz oops ; eof
- ;
- ; Now check for alpha character.
- ;
- mov al,inchar
- call isalpha ; proc sets carry flag if not alpha
- jc output
- ok:
- inc count
- stosb
- jmp again
- output:
- mov bx,1h ; standard output handle
- lea dx,buffer ;
- mov cx,count ; get # of char to output
- mov ah,40h ;
- int 21h ; call dos output function
- call outcrlf
- skip:
- ;
- ; read a character until alphabetic.
- ;
- xor bx,bx ; zero is handle of standard input
- mov cx,1h ; get 1 character
- lea dx,inchar ; offset of inchar
- mov ah,3fh ; read a file/device function
- int 21h ; invoke the function
- ;
- ; if carry set of ax=0 exit
- ;
- jc oops ; i/o error
- and ax,ax ; set flags
- jz oops ; eof
- ;
- ; now check it - if alpha, reset else skip again
- ;
- mov al,inchar
- call isalpha
- jc skip
- ;
- ; character is alpha - reset buffer and jump to top again.
- ;
- mov count,1h ; reset count
- lea di,buffer ; reset buffer
- stosb
- jmp again ; repeat cycle
- oops:
- cmp count,0h ; if something in buffer, output it.
- jz exit
- ;
- mov bx,1h ; standard output handle
- lea dx,buffer ;
- mov cx,count ; get # of char to output
- mov ah,40h ;
- int 21h ; call dos output function
- call outcrlf
- exit:
- int 20h ; return to dos
- translat endp
- ;
- ;
- isalpha proc near
- stc ; assume bad
- cmp al,'A' ; if <A or >z then bad
- jb notalpha ;
- cmp al,'z'
- ja notalpha
- cmp al,'Z' ; if <=Z or >=a then ok
- jbe yesalpha
- cmp al,'a'
- jb notalpha
- yesalpha:
- clc
- notalpha:
- ret
- isalpha endp
- ;
- outcrlf proc near
- mov bx,1h ; standard output handle
- lea dx,crlf ;
- mov cx,2h ; get # of char to output
- mov ah,40h ;
- int 21h ; call dos output function
- ret
- outcrlf endp
- ;
- code ends
- end translat